查看原文
其他

深入理解包管理----前言

牛晓伟 牛晓伟
2024-12-14

为啥要写包管理系列文章

关于systemserver相关的文章Android大脑--systemserver进程systemserver进程监控者--watchdog就先告一段落了,从本篇开始将介绍包管理相关的文章,这里的包管理其实指的就是PackageManagerService (以下简写为PMS),PMS在整个Android中的地位不言而喻,PMS包含的知识很多比如apk的安装/更新/卸载,权限管理,apk信息查询等,因此不是一两篇文章可以介绍完的,故写成一个系列来介绍PMS。

都有哪些内容

暂且规划以下内容,有可能在写的过程中会增加别的内容。

1.各种复杂繁多的数据类

在刚开始接触PMS的时候,我个人感觉最令我头疼的就是数据类真的是太多了,比如PackageSetting、PackageImpl、PackageUserStateImpl、LegacyPermissionSettings、Permission、PermissionInfo等等,有的看了名字后感觉它们要表达的意思都差不多比如Permission、PermissionInfo。因此我希望把这些数据类整理清楚、整理明白了分享与大家。

2. 如何高效的提供数据服务

大家都知道PMS持有了所有已安装apk的各种数据,如apk中声明的四大组件、使用到的权限、使用到的共享库等等.而这些数据是不断的动态变化的,因此会使用到锁来保持这些数据的一致性,当安装的apk很多的时候,那PMS持有的这些数据是非常庞大的。

大家都知道PMS持有的这些数据是会供使用者来进行查询的,比如ActivityTaskManagerService在启动Activity的时候根据Component从PMS查询对应的Activity信息,再比如在启动app进程的时候ActivityManagerService需要从根据包名从PMS查询对应的ApplicationInfo信息。

像PMS持有如此庞大的数据,并且这些数据使用锁来保证它们的一致性,那该如何保证提供高效、稳定的查询服务呢?

答案是使用快照(snapshot)、观察者模式,这也会在系列文章中介绍。

3. 权限管理

基本每个安装在Android设备上的apk都会申请一些权限,而权限的申请、权限的声明这些操作都归PermissionManagerService服务负责。这也会在系列文章中介绍。

4. 共享库

在AndroidManifest清单文件中是可以使用uses-libraryuses-native-library标签来使用系统或者其他apk提供的共享库的,并且系统apk可以在AndroidManifest清单文件中使用library标签来声明一个共享库供别的程序来使用的,还包括共享库是如何被app进程使用的等,这些在系列文章中都会涉及到。

5. apk扫描、安装

在PMS构造方法中会对所有apk (系统apk、普通apk)进行扫描,那为啥要进行这些扫描呢?apk的安装为啥需要使用PackageSetting这个数据类来保存它的信息呢?

当然还包括AndroidManifest清单文件内容解析、PMS启动等等。欢迎大家关注后面的精彩内容。


继续滑动看下一个
牛晓伟
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存